﻿/**
 *		key-value键值对，用于解析key1=value1&key2=value2....类型的数据
 *@author		吴建凰
 *@date			2015年7月23日
 */
#ifdef __cplusplus
#ifndef Oss_KEY_VALUE_H
#define Oss_KEY_VALUE_H

#include <ossDll.h>
#include <ossQueue.h>
#include <ossLock.h>


class OssKeyValueItem : public OssQueue
{
	friend class OssKeyValue;
public :
	OssKeyValueItem(char* key="");
	virtual ~OssKeyValueItem();

	OssKeyValueItem& operator=(char* value);

	/**
	 *		返回转换为json字符串的长度
	 */
	int GetJsonLen();
public:
	char*	key;
	char*	value;
private:
	int	 m_mallocLen; 
};

/**
 *		key-value类，线程不安全，多线程使用时注意保护
 */
class OssKeyValue
{
public:
	/**
	 *		构造
	 *@keyvalueStrs  key-value的字符串
	 */
	OssKeyValue();
	virtual ~OssKeyValue(void);

	/**
	 *		初始化键值对
	 *@keyvalueStrs  key-value的字符串
	 *@return	成功返回TRUE
	 *			失败返回False
	 */
	Bool AddInitKeyValue(char* keyvalueStrs);

	/**
	 *		重载[]符号
	 */
	OssKeyValueItem& operator[](char* key);

	OssKeyValueItem* IteratorBegin();
	OssKeyValueItem* IteratorNext(OssKeyValueItem* kvi);
	
	/**
	 *		转换为json
	 *@buff		存放json的空间，如果为NULL，则为测试需要多少空间
	 *@nMax		buff的最大空间
	 *@return	返回实际使用的空间大小
	 */
	int ToJson(char* buff,int nMax);
protected:
	void AddKeyValueItem(char* key,char* value,int len);

private:
	OssCritical			m_queueCritical;
	OssQueue			m_queue;
};



#endif	//end Oss_KEY_VALUE_H
#endif	//end __cplusplus